package com.cw.jeeyt.service.intf.security;

import java.util.List;

import com.cw.jeeyt.service.bo.security.SecurityUserBo;
import com.cw.jeeyt.service.bo.security.SecurityUserVo;
import com.cw.lang.mybatis.dto.PageInfo;

/**
 * 用户信息业务接口
 *
 * @author chenw
 * @version 1.0.0
 */
public interface SecurityUserService {

    /**
     * 删除用户信息
     *
     * @param userBo
     */
    void delete(SecurityUserBo userBo) throws Exception;

    /**
     * 更新用户信息
     *
     * @param userBo
     */
    void update(SecurityUserBo userBo) throws Exception;

    /**
     * 根据主键查询用户信息
     *
     * @param id
     * @return
     */
    SecurityUserBo getUserById(Long id) throws Exception;

    /**
     * 根据用户名称查询用户信息
     *
     * @param userName 用户名称
     * @return
     * @throws Exception
     */
    SecurityUserBo getUserByUserName(String userName) throws Exception;

    /**
     * 新增用户信息
     *
     * @param userBo
     * @return
     */
    Integer insert(SecurityUserBo userBo) throws Exception;

    /**
     * 分页查询用户信息
     *
     * @param userBo
     * @param startNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    PageInfo<SecurityUserBo> queryByPage(SecurityUserBo userBo, Integer startNum, Integer pageSize) throws Exception;

    /**
     * 根据组织ID查询用户列表
     *
     * @param orgId 组织ID
     * @return 用户列表
     */
    List<SecurityUserVo> getUserListByOrgId(Long orgId);

    /**
     * 根据id查询用户
     *
     * @param userId 用户Id
     * @return 返回用户视图对象
     */
    SecurityUserVo getSecurityUserDoById(Long userId, Long defaultOrgId);

    /**
     * 根据account获取用户
     *
     * @param account 用户账户
     * @return 用户视图对象
     */
    SecurityUserVo getUserByAccount(String account);

    /**
     * * 新增用户
     *
     * @param userVo 用户视图对象
     * @return 成功返回true，失败返回false
     * @throws Exception
     */
    boolean addUser(SecurityUserVo userVo) throws Exception;

    /**
     * * 新增用户  不再对密码进行加密 适用于已加过密的信息
     *
     * @param user 用户视图对象
     * @return 成功返回true，失败返回false
     * @throws Exception
     */
    boolean addUserByEncodePassword(SecurityUserVo user) throws Exception;

    /**
     * 更新用户，包含关联信息
     *
     * @param userVo 用户视图对象
     * @return 成功返回true，失败返回false
     * @throws Exception
     */
    boolean updateUser(SecurityUserVo userVo) throws Exception;

    /**
     * 更新用户基础数据
     *
     * @param user 用户对象
     * @return 成功返回true，失败返回false
     * @throws Exception
     */
    boolean updateUser(SecurityUserBo user) throws Exception;

    /**
     * 更新用户默认所属的组织
     *
     * @param user 用户对象
     * @return 成功返回true，失败返回false
     * @throws Exception
     */
    boolean updateUserDefaultOrgId(SecurityUserBo user) throws Exception;

    /**
     * 根据角色Id获取用户列表
     *
     * @return 用户列表
     */
    List<SecurityUserBo> getUserListByRoleId(Long roleId);

    /**
     * 获取用户列表
     *
     * @param orgLevelCode
     * @return
     */
    List<SecurityUserVo> getDistinctUserListByOrgId(String orgLevelCode);

    /**
     * 更新用户状态
     *
     * @param account
     * @param userState
     * @return
     * @throws Exception
     */
    void updateUserState(String account, String userState) throws Exception;

    /**
     * 根据默认组织机构ID、用户类型查找用户列表
     *
     * @param defaultOrgId 用户类型type
     * @return 用户列表
     */
    List<SecurityUserVo> getUserListByDefaultOrgIdAndType(Long defaultOrgId, String type);

    /**
     * 用户注册
     *
     * @param securityUser
     */
    boolean registerUser(SecurityUserBo securityUser) throws Exception;

    /**
     * 修改密码
     *
     * @param userBo
     * @throws Exception
     */
    void updatePassword(SecurityUserBo userBo) throws Exception;

    /**
     * 根据条件查询用户列表
     *
     * @param securityUser
     * @return
     */
    List<SecurityUserBo> queryListByCondition(SecurityUserBo securityUser);

    /**
     * 根据userId查询用户信息
     *
     * @param userId
     * @return
     */
    SecurityUserVo getUserByUserId(String userId);

    /**
     * 更新user
     *
     * @param userBo
     */
    void modifyUser(SecurityUserBo userBo) throws Exception;

    /**
     * 重置用户密码
     *
     * @param id
     */
    String resetPwd(Long id);

    /**
     * 登录用户校验
     *
     * @param account
     * @param password
     */
    SecurityUserBo checkUserLogin(String account, String password);
}
